package com.itheima.d1_char_stream;

import java.io.FileWriter;
import java.io.Writer;

/**
 * 目标：掌握文件字符输出流：写字符数据出去
 *
 * FileWriter(文件字符输出流)
 * 作用：以内存为基准，把内存中的数据以字符的形式写出到文件中去。
 *
 *      构造器                                                 说明
 *  public FileWriter(File file)                        创建字节输出流管道与源文件对象接通
 *  public FileWriter(String filepath)                  创建字节输出流管道与源文件路径接通
 *  public FileWriter(File file，boolean append)        创建字节输出流管道与源文件对象接通，可追加数据
 *  public FileWriter(String filepath，boolean append)  创建字节输出流管道与源文件路径接通，可追加数据
 *      方法名称
 *  void write(int c)                                   写一个字符
 *  void write(String str)                              写一个字符串
 *  void write(String str, int off, int len)            写一个字符串的一部分
 *  void write(char[] cbuf)                             写入一个字符数组
 *  void write(char[] cbuf, int off, int len)           写入字符数组的一部分
 *
 * public void flush() throws IOException               刷新流，就是将内存中缓存的数据立即写到文件中去生效！
 * public void close() throws IOException               关闭流的操作，包含了刷新！
 * 注意事项：
 *  字符输出流写出数据后，必须刷新流，或者关闭流，写出去的数据才能生效
 *
 * 字节流、字符流的使用场景小结：
 *      字节流适合做一切文件数据的拷贝（音视频，文本）；字节流不适合读取中文内容输出，因为容易截断中文的字节，导致输出乱码
 *      字符流适合做文本文件的操作（读，写）。
 *
 */
public class FileWriterTest2 {
    public static void main(String[] args) {
        try (
                // 0、创建一个文件字符输出流管道与目标文件接通。
                // 覆盖管道，每一次重新运行程序，都会覆盖之前这个路径下的文件的内容
                // Writer fw = new FileWriter("Day09Io-App2/src/itheima02out.txt");
                // 所以想要给管道追加数据，就需要加个true，和前面的文件字节输出流类似
                Writer fw = new FileWriter("Day09Io-App2/src/itheima02out.txt", true);
                ){
            // 1、public void write(int c):写一个字符出去
            fw.write('a');
            fw.write(97);
            //fw.write('磊'); // 写一个字符出去
            fw.write("\r\n"); // 换行
            fw.write("曾季洪牛逼");

            // 2、public void write(String c)写一个字符串出去
            fw.write("我爱你中国abc");
            fw.write("\r\n");

            // 3、public void write(String c ,int pos ,int len):写字符串的一部分出去
            fw.write("我爱你中国abc", 0, 5);
            fw.write("\r\n");

            // 4、public void write(char[] buffer):写一个字符数组出去
            char[] buffer = {'黑', '马', 'a', 'b', 'c'};
            fw.write(buffer);
            fw.write("\r\n");

            // 5、public void write(char[] buffer ,int pos ,int len):写字符数组的一部分出去
            fw.write(buffer, 0, 2);
            fw.write("\r\n");

            System.out.println("-----------------自己试一试----------");
            char[] zeng1 = {'曾','大','酷','z'};
            fw.write(zeng1,0,3);
            fw.write("\r\n");

            fw.write("今天睡得不够香",0,5);

        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("----------------整套视频已学完，回过头来自己试一试--------------");
        try(
                Writer zw = new FileWriter("Day09Io-App2\\src\\zengjihong2.txt",true)
                ){
            zw.write('曾');
            zw.write("季洪牛逼");
            zw.write("\r\n");
            zw.write("，有多牛逼，超级牛逼",0,7);

        }catch (Exception e){
            e.printStackTrace();
        }

    }
}
